<!DOCTYPE html>
<html lang="zh-cn">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">




<title>数据库设计规范 | Miles`s</title>

<link rel="stylesheet" href="https://mada.gitee.io/notes//css/styles.css">

<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.2.0/css/all.css" 
integrity="sha384-hWVjflwFxL6sNzntih27bfxkr27PmbbK/iSvJ+a4+0owXq79v+lsFkW54bOGbiDQ" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.js" integrity="sha256-2Kok7MbOyxpgUVvAk/HJ2jigOSYS2auK4Pfzbm7uH60=" crossorigin="anonymous"></script>


<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/zenburn.min.css" crossorigin="anonymous" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js" integrity="sha256-/BfiIkHlHoVihZdc6TFuj7MmJ0TWcWsMXkeDFwhi0zw=" crossorigin="anonymous"></script>
<script>hljs.initHighlightingOnLoad();</script>
<script src="https://mada.gitee.io/notes//js/highlight.js"></script>






<div class="container">
    <nav class="navbar level">
      <div class="navbar-brand">
          <a class="nav-item" href="https://mada.gitee.io/notes/"><h1 class="title is-3">Miles`s</h1></a>
      </div>           
      <div class="navbar-menu has-text-centered is-active">
          <div class="navbar-end is-centered">
              
           </div>
      </div>
    </nav>
  </div>
<div class="container">
  <h2 class="subtitle is-6">June 29, 2016</h2>
  <h1 class="subtitle is-size-4-mobile is-size-3-desktop">数据库设计规范</h1>
  <div class="content">
    

<h3 id="数据库规范的5个要求">数据库规范的5个要求</h3>

<h4 id="表中应该避免为空的列">表中应该避免为空的列</h4>

<p>控字段是一种比较特殊的数据类型。数据库处理的时候需要进行特殊的处理。降低性能。</p>

<p>解决方法：</p>

<ol>
<li>默认值</li>
<li>建立一张副表，保存空值比较多的字段。</li>
</ol>

<h4 id="表不应该有重复的值或列">表不应该有重复的值或列</h4>

<p>如 多个联系人 等。</p>

<p>解决方法：</p>

<ol>
<li>建立独立表，使用视图连接关系。</li>
</ol>

<h4 id="表中记录应该有唯一的标识符">表中记录应该有唯一的标识符。</h4>

<p>养成用ID唯一标识记录，而不是通过名字等。而且最好是由数据库自己来维护。
可以添加一个字段行号等，来弥补id排序的缺陷。</p>

<h4 id="数据库表有统一的前缀">数据库表有统一的前缀</h4>

<p>复杂的应用系统，制定命名规范。</p>

<h4 id="尽量只存储单一的实体类型的数据">尽量只存储单一的实体类型的数据</h4>

<p>描述对象的本身。</p>

<h3 id="范式">范式</h3>

<p>符合某一级别的关系模式的集合
为了消除重复数据减少冗余数据，从而然数据库内的数据更好的组织，然磁盘空间得到更有效利用的一种标准化标准，满足高等级的范式的先决条件是满足低等级范式。</p>

<h4 id="第一范式">第一范式</h4>

<p>如果一个关系模式R的所有属性都是不可分的基本数据项  则  <code>R&lt;1NF</code></p>

<h4 id="第二范式">第二范式</h4>

<p>若关系模式<code>R&lt;1NF</code>, 并且非主属性都完全依赖于R的码，则 <code>R&lt;2NF</code>
简单的说，就是属性必须完全依赖于全部主键，而不是部分主键。
所以如果只有一个主键的表，如果满足第一范式，那一定是第二范式。</p>

<h4 id="第三范式">第三范式</h4>

<p>关系模式<code>R&lt;U，F&gt;</code> 中若不存在这样的码X、属性组Y及非主属性Z（Z  Y）, 使得X→Y，Y→Z，成立，则称<code>R&lt;U，F&gt; ∈ 3NF</code></p>

<p>简单的说，第三范式是为了消除数据库中关键字之间的依赖关系。</p>

<h4 id="bc范式">BC范式</h4>

<p>设关系模式<code>R&lt;U，F&gt;∈1NF</code>，如果对于R的每个函数依赖X→Y，若Y不属于X，则X必含有候选码，那么<code>R∈BCNF</code>。</p>

<p>简单的说就是在第三范式的基础上的一种特殊情况，既每个表中只有一个候选键。</p>

<h4 id="第四范式">第四范式</h4>

<p>关系模式<code>R&lt;U，F&gt;∈1NF</code>，如果对于R的每个非平凡多值依赖X→→Y（Y  X），X都含有候选码，则R∈4NF。</p>

<p>简单的说 第四范式是消除表中的多值依赖，也就是说可以减少维护数据一致性的工作。</p>

  </div>
</div>
<div class="container has-text-centered">
    
</div>

<div class="container has-text-centered">
  
</div>
<section class="section">
  <div class="container has-text-centered">
    <p></p>
  </div>
</section>


